'use strict'

const arr1 = [1,2,3];
const der = arr1.map (function (i) { 
  return i * 2+1; 
});

console.log(der);


var h = [1, 2, 3];
var hh = h.map(m => m * 9);
console.log(hh);


var jj =[1,23,7,4,5];

// function ger(item){
//     return item -1;
// };
// var ter = arr.map(ger);

// console.log(ter);

var txt = jj.filter(function (b){
    return b % 2 !== 0; 
});

console.log(txt);

var arr5 = [1, 3, 5, 7, 9];
arr5.reduce(function (x, y) {
    return x * 10 + y;
}); 

console.log(arr5);

const f = [1,2,5,7,5];

function k(v){
    return Math.abs(v+2);
}

console.log(f.map(k));



var arr = [1,2,3];

var reducer = function add(stepProduct , item) { 
    return stepProduct * item; 
};

var product = arr.reduce(reducer, 1);

console.log(product);     //6



var t = [1,9,3].reduce(function(stepProduct , item){
    return stepProduct * item;
},1);

console.log(t);

var t = [].reduce.call([1,2,3],function(stepProduct , item){
    return stepProduct * item;
},1);

console.log(t);


var list1 = [[0, 1], [2, 3], [4, 5]];
var list2 = [0, [1, [2, [3, [4, [5, [6]]]]]]];

function flatten(arr){
    return arr.reduce(function(acc, val){
        return acc.concat(Array.isArray(val) ? flatten(val) : val)
    }, []);
};

console.log(flatten(list1));  // [0, 1, 2, 3, 4, 5]
console.log(flatten(list2));  // [0, 1, 2, 3, 4, 5, 6]

//filter()实例：筛选排除掉所有的小值​
//下例使用 filter 创建了一个新数组，该数组的元素由原数组中值大于 10 的元素组成。

function isBigEnough(element) {
    return element >= 10;
    }
    var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
    
    console.log(filtered);//[ 12, 130, 44 ]

    /*
　　filter()兼容旧环境
　　filter 被添加到 ECMA-262 标准第 5 版中，因此在某些实现环境中不被支持。可以把下面的代码插入到脚本的开头来解决此问题，
　　该代码允许在那些没有原生支持 filter 的实现环境中使用它。该算法是 ECMA-262 第 5 版中指定的算法
*/

Array.prototype.filter = Array.prototype.filter || function(func) {
    var arr = this;
    var r = [];
    for (var i = 0; i < arr.length; i++) {
    if (func(arr[i],i,arr)) {
    r.push(arr[i]);
    }
    }
    return r;
    }